package net.servir.capacidades.web.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import net.servir.capacidades.model.Ejecutora;
import net.servir.capacidades.model.Enumerados;
import net.servir.capacidades.model.Usuario;
import net.servir.capacidades.model.jsp.JspEjecutoraEdicion;
import net.servir.capacidades.service.CapacidadesService;
import net.servir.capacidades.service.CensoService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class EjecutoraEdicionController {

	@Autowired 
	private CapacidadesService capacidadesService;
	@Autowired 
	private CensoService censoService;

	@RequestMapping("/ejecutoraEdicion.htm")
	public @ModelAttribute("ejecutoraEdicion")
	JspEjecutoraEdicion participanteBusqueda(HttpServletRequest request) {
		
		//************************************************************
		// se obtiene el dni de la session activa
		//************************************************************
		HttpSession session = request.getSession();
		String cod_session =session.getId();

		String dniResponsable = null;
		if(session.getAttribute("dni") != null)			
			dniResponsable = session.getAttribute("dni").toString();
		
		//Obtenemos los datos del Usuario
		Usuario usuario = capacidadesService.GetUsuarioIdentificacion(dniResponsable);
		
		if (usuario == null)
			return null;
			
		//************************************************************
		JspEjecutoraEdicion obj = new JspEjecutoraEdicion();		
		String accion = null;
		Integer idEjecutora = null;
		Integer idNivelGobierno = null;
		Integer idSector = null;
		Integer idPliego = null;
		String coddep = "";
		String codpro = "";
		String coddis = "";
		String descripcion = "";
		String direccion = "";
		String telefono = "";
		String ubigeo = "";
		String cod_regimen = "";
		Ejecutora ejecutora = new Ejecutora();
		// Atributos basico
		idEjecutora = Integer.parseInt(request.getParameter("idEjecutora"));
		accion = request.getParameter("accion");
		obj.setNivelGobiernos(capacidadesService.ObtenerNivelGobiernos());		
		obj.setDepartamentos(capacidadesService.ObtenerDepartamentos());
		idNivelGobierno = Integer.parseInt(request.getParameter("idNivelGobierno").toString());
		if (request.getParameter("idSector") != null)
			idSector= Integer.parseInt(request.getParameter("idSector").toString());
		if (request.getParameter("idPliego") != null)
			idPliego= Integer.parseInt(request.getParameter("idPliego").toString());
		if (request.getParameter("cod_regimen") != null)
			cod_regimen= request.getParameter("cod_regimen").toString();
		
		coddep = request.getParameter("coddep");
		if (!accion.equals("REFRESCARDEP"))
			codpro = request.getParameter("codpro");
		if (!accion.equals("REFRESCARPROV") && !accion.equals("REFRESCARDEP"))
			coddis = request.getParameter("coddis");
		if (request.getParameter("descripcion")!= null)
			descripcion = request.getParameter("descripcion").toUpperCase();
		if (request.getParameter("direccion")!= null)
			direccion = request.getParameter("direccion").toUpperCase();
		
		telefono = request.getParameter("telefono");
		ejecutora.setId_nivel_gobierno(idNivelGobierno);
		ejecutora.setId_sector(idSector);
		ejecutora.setId_pliego(idPliego);
		ejecutora.setCod_regimen(cod_regimen);
		System.out.println("accion = "+accion);
		if (accion.equals("INICIO"))
		{
			if (idEjecutora == 0)
			{
				ejecutora.setDescripcion("");
				ejecutora.setTelefono("");
				ejecutora.setDireccion("");
				ejecutora.setId_ejecutora(idEjecutora);
			}
			else
			{
				ejecutora = capacidadesService.GetEjecutora(idEjecutora);
				// Set el entorno para la entidad actual
				ubigeo = ejecutora.getUbigeo();
				idNivelGobierno = ejecutora.getId_nivel_gobierno().intValue();
				idSector = ejecutora.getId_sector().intValue();
				idPliego = ejecutora.getId_pliego().intValue();
				if (ubigeo != null && !ubigeo.equals(""))
				{	// lo valores de UBIGEO son asignados a partir de la ejecutora 
					coddep = ubigeo.substring(0, 2);
					codpro = ubigeo.substring(2, 4);
					coddis = ubigeo.substring(4, 6);
				}
			}				
		}
		else
		{
			ejecutora.setDescripcion(descripcion);
			ejecutora.setDireccion(direccion);
			ejecutora.setTelefono(telefono);
			ejecutora.setId_ejecutora(idEjecutora);
			ejecutora.setId_sector(idSector);
			ejecutora.setId_pliego(idPliego);
			ejecutora.setId_nivel_gobierno(idNivelGobierno);
			ubigeo = coddep + codpro + coddis;
			ejecutora.setUbigeo(ubigeo);
			String ubigeoRpt = "";
			if (idNivelGobierno != null)
			{
				switch (idNivelGobierno.intValue()) {
				case 1:	//Local distrital
					ubigeoRpt = ubigeo;
					break;
				case 2: //Nacional 
					ubigeoRpt = "000000";
					break;
				case 3: //Regional 
					ubigeoRpt = coddep+"0000";
					break;
				case 5: //Local Provincial
					ubigeoRpt = coddep+codpro+"00";
					break;
				default:
					ubigeoRpt = ubigeo;
					break;
				}	
			}
			ejecutora.setUbigeo_rpt(ubigeoRpt);		
		}
		
		//if (idNivelGobierno != null  & idNivelGobierno == Enumerados.NivelGobiernoConSector.NACIONAL.getCodigo())
			obj.setSectores(capacidadesService.ObtenerSectors());
		if (idSector != null  && idSector > 0)
		{
			obj.setPliegos(censoService.obtenerPliegos(idSector));
		}
		if (coddep != null)
			obj.setProvincias(capacidadesService.ObtenerProvincias(coddep));
		if (coddep != null && codpro != null)
			obj.setDistritos(capacidadesService.ObtenerDistritos(coddep, codpro));
		obj.setCoddep(coddep);
		obj.setCodpro(codpro);
		obj.setCoddis(coddis);
		
		obj.setRegimenes(capacidadesService.ObtenerRegimenes());
		
		if (accion.equals("GRABAR"))
		{
			idEjecutora = censoService.grabarEjecutora(ejecutora);
			ejecutora.setId_ejecutora(idEjecutora);
		}
		obj.setEjecutora(ejecutora);
		return obj;
	}
}
